[HEADING=2]NetworkSwitcher[/HEADING]
Программа для Windows, которая переключает сеть между двумя адаптерами по их именам.
Есть консольная версия ([ICODE]SwitchAdapter.exe[/ICODE]) и версия с окном WPF ([ICODE]SwitchAdapterGui.exe[/ICODE]).

[HEADING=2]Что делает[/HEADING]
[LIST=1]
[*]Позволяет переключиться между двумя сетевыми адаптерами - один адаптер отключается, а второй включается. При повторном запуске программы происходит наоборот - первый адаптер включается, а второй отключается. Имена адаптеров читаются из [ICODE]adapters.json[/ICODE].
[*]Сбрасывает кэш DNS и показывает, какой адаптер теперь активен.
[/LIST]

[HEADING=2]Запуск (доступны 2 версии)[/HEADING]
[I]программу можно найти в папке [ICODE]./C#/publish/[/ICODE][/I]
[LIST]
[*]Консольная версия [ICODE]SwitchAdapter.exe[/ICODE] сразу переключает адаптеры.
[*]Оконная версия [ICODE]SwitchAdapterGui.exe[/ICODE] позволяет выбрать адаптеры в окне.
[/LIST]

[HEADING=2]GUI (SwitchAdapterGui.exe)[/HEADING]
[LIST]
[*]Два выпадающих списка с именами всех адаптеров. Выбор сразу сохраняется в [ICODE]adapters.json[/ICODE].
[*]Рамка вокруг списка: зелёная - адаптер включён (активен), красная - выключен или не найден.
[*]Рядом с каждым списком кнопка [B]Enable[/B]/[B]Disable[/B] - включает или выключает именно этот адаптер.
[*]Кнопка [B]Switch[/B] делает то же, что консольная версия: выключает включённый адаптер и включает другой.
[*]В строке состояния - какой адаптер сейчас активен (или сообщение об ошибке).
[*]Кнопка [B]Open Network settings[/B] открывает окно «Сетевые подключения» ([ICODE]ncpa.cpl[/ICODE]).
[/LIST]

[HEADING=2]Настройка консольной версии[/HEADING]
Файл [ICODE]adapters.json[/ICODE] лежит рядом с [ICODE]SwitchAdapter.exe[/ICODE] и [ICODE]SwitchAdapterGui.exe[/ICODE] (общий для обеих программ):
[CODE]
{
  "Adapter1": "Подключение по локальной сети",
  "Adapter2": "Беспроводное сетевое соединение 5"
}
[/CODE]
При запуске консольной программы будет создан файл [ICODE]adapter-names.txt[/ICODE]. Отсюда вы можете взять точные имена для вставки в настройки [ICODE]adapters.json[/ICODE]. В GUI имена выбираются из списка.

[LIST]
[*]Имена должны точно совпадать с именами в окне «Сетевые подключения» ([ICODE]ncpa.cpl[/ICODE]) - регистр и пробелы важны. Имя нужно брать не из имён под пиктограммой, а в свойствах подключения (они могут отличаться).
[/LIST]

[HEADING=2]Требования[/HEADING]
[LIST]
[*]Windows 7 или новее
[*][URL='https://dotnet.microsoft.com/ru-ru/download/dotnet/10.0'].NET 10 Desktop Runtime[/URL]
[*]Права администратора
[/LIST]

[HEADING=2]Сборка[/HEADING]
[LIST]
[*]Требуется [URL='https://dotnet.microsoft.com/ru-ru/download/dotnet/10.0'].NET 10 SDK[/URL]
[*]Запустите [ICODE]build.bat[/ICODE] - он собирает версии x64 и x86 в папки [ICODE]publish\x64[/ICODE] и [ICODE]publish\x86[/ICODE] (в каждой: [ICODE]SwitchAdapter.exe[/ICODE], [ICODE]SwitchAdapterGui.exe[/ICODE], общая [ICODE]NetworkSwitcher.Core.dll[/ICODE] и [ICODE]adapters.json[/ICODE])
[*]Для разработки откройте [ICODE]NetworkSwitcher.slnx[/ICODE] в Visual Studio 2026. При обычной сборке все проекты кладут результат в общую папку [ICODE]bin\<Configuration>\[/ICODE]. Программы требуют прав администратора (manifest), поэтому для отладки Visual Studio нужно запускать от администратора.
[/LIST]

[HEADING=2]Состояние адаптера[/HEADING]
Состояние берётся из WMI-свойства [ICODE]ConfigManagerErrorCode[/ICODE] (0 - включён, 22 - отключён), а не из [ICODE]NetEnabled[/ICODE]: [ICODE]NetEnabled[/ICODE] возвращает [ICODE]False[/ICODE] и для включённого адаптера без подключения к сети (например, Wi-Fi вне зоны действия).

[HEADING=2]Зависимости (NuGet)[/HEADING]
[LIST]
[*][ICODE]System.Management[/ICODE] 10.0.13 (Microsoft) - доступ к WMI. Исходный код: [URL]https://github.com/dotnet/runtime/tree/main/src/libraries/System.Management[/URL]
[/LIST]
JSON обрабатывается встроенным в .NET [ICODE]System.Text.Json[/ICODE] (отдельный пакет не нужен).
Ссылка на исходный код пакета также указана комментарием в [ICODE]NetworkSwitcher.Core\NetAdapter.cs[/ICODE] и в [ICODE]NetworkSwitcher.Core.csproj[/ICODE].

Для включения/выключения используется WMI ([ICODE]Win32_NetworkAdapter[/ICODE]), для сброса DNS - WinAPI ([ICODE]dnsapi.dll[/ICODE]).
Никакие встроенные утилиты Windows ([ICODE]netsh[/ICODE], [ICODE]wmic[/ICODE], [ICODE]ipconfig[/ICODE], PowerShell и т. п.) не запускаются.

[HEADING=2]Другие реализации[/HEADING]
В комплекте несколько реализаций (на разных языках), которые делают одно и то же. Рекомендуется версия на C#.
Скриптовые версии в отличие от C# запускают встроенные утилиты wmic, netsh, ipconfig.
